-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[CodeGen] Use VirtRegOrUnit where appropriate (NFCI) #167730
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
|
✅ With the latest revision this PR passed the C/C++ code formatter. |
6cb9075 to
a67a46f
Compare
|
@llvm/pr-subscribers-llvm-regalloc @llvm/pr-subscribers-backend-amdgpu Author: Sergei Barannikov (s-barannikov) ChangesUse it in Static type checking revealed several bugs, mainly in MachinePipeliner. There is one bug in Patch is 60.68 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/167730.diff 12 Files Affected:
diff --git a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
index 6982dae4718d1..88d11e0f19fd4 100644
--- a/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
+++ b/llvm/include/llvm/CodeGen/MachineRegisterInfo.h
@@ -637,7 +637,7 @@ class MachineRegisterInfo {
/// Get an iterator over the pressure sets affected by the given physical or
/// virtual register. If RegUnit is physical, it must be a register unit (from
/// MCRegUnitIterator).
- PSetIterator getPressureSets(Register RegUnit) const;
+ PSetIterator getPressureSets(VirtRegOrUnit VRegOrUnit) const;
//===--------------------------------------------------------------------===//
// Virtual Register Info
@@ -1249,15 +1249,16 @@ class PSetIterator {
public:
PSetIterator() = default;
- PSetIterator(Register RegUnit, const MachineRegisterInfo *MRI) {
+ PSetIterator(VirtRegOrUnit VRegOrUnit, const MachineRegisterInfo *MRI) {
const TargetRegisterInfo *TRI = MRI->getTargetRegisterInfo();
- if (RegUnit.isVirtual()) {
- const TargetRegisterClass *RC = MRI->getRegClass(RegUnit);
+ if (VRegOrUnit.isVirtualReg()) {
+ const TargetRegisterClass *RC =
+ MRI->getRegClass(VRegOrUnit.asVirtualReg());
PSet = TRI->getRegClassPressureSets(RC);
Weight = TRI->getRegClassWeight(RC).RegWeight;
} else {
- PSet = TRI->getRegUnitPressureSets(RegUnit);
- Weight = TRI->getRegUnitWeight(RegUnit);
+ PSet = TRI->getRegUnitPressureSets(VRegOrUnit.asMCRegUnit());
+ Weight = TRI->getRegUnitWeight(VRegOrUnit.asMCRegUnit());
}
if (*PSet == -1)
PSet = nullptr;
@@ -1278,8 +1279,8 @@ class PSetIterator {
};
inline PSetIterator
-MachineRegisterInfo::getPressureSets(Register RegUnit) const {
- return PSetIterator(RegUnit, this);
+MachineRegisterInfo::getPressureSets(VirtRegOrUnit VRegOrUnit) const {
+ return PSetIterator(VRegOrUnit, this);
}
} // end namespace llvm
diff --git a/llvm/include/llvm/CodeGen/Register.h b/llvm/include/llvm/CodeGen/Register.h
index 790db8a11e390..5e1e12942a019 100644
--- a/llvm/include/llvm/CodeGen/Register.h
+++ b/llvm/include/llvm/CodeGen/Register.h
@@ -206,6 +206,10 @@ class VirtRegOrUnit {
constexpr bool operator==(const VirtRegOrUnit &Other) const {
return VRegOrUnit == Other.VRegOrUnit;
}
+
+ constexpr bool operator<(const VirtRegOrUnit &Other) const {
+ return VRegOrUnit < Other.VRegOrUnit;
+ }
};
} // namespace llvm
diff --git a/llvm/include/llvm/CodeGen/RegisterPressure.h b/llvm/include/llvm/CodeGen/RegisterPressure.h
index 261e5b0d73281..20a7e4fa2e9de 100644
--- a/llvm/include/llvm/CodeGen/RegisterPressure.h
+++ b/llvm/include/llvm/CodeGen/RegisterPressure.h
@@ -37,11 +37,11 @@ class MachineRegisterInfo;
class RegisterClassInfo;
struct VRegMaskOrUnit {
- Register RegUnit; ///< Virtual register or register unit.
+ VirtRegOrUnit VRegOrUnit;
LaneBitmask LaneMask;
- VRegMaskOrUnit(Register RegUnit, LaneBitmask LaneMask)
- : RegUnit(RegUnit), LaneMask(LaneMask) {}
+ VRegMaskOrUnit(VirtRegOrUnit VRegOrUnit, LaneBitmask LaneMask)
+ : VRegOrUnit(VRegOrUnit), LaneMask(LaneMask) {}
};
/// Base class for register pressure results.
@@ -157,7 +157,7 @@ class PressureDiff {
const_iterator begin() const { return &PressureChanges[0]; }
const_iterator end() const { return &PressureChanges[MaxPSets]; }
- LLVM_ABI void addPressureChange(Register RegUnit, bool IsDec,
+ LLVM_ABI void addPressureChange(VirtRegOrUnit VRegOrUnit, bool IsDec,
const MachineRegisterInfo *MRI);
LLVM_ABI void dump(const TargetRegisterInfo &TRI) const;
@@ -279,25 +279,25 @@ class LiveRegSet {
RegSet Regs;
unsigned NumRegUnits = 0u;
- unsigned getSparseIndexFromReg(Register Reg) const {
- if (Reg.isVirtual())
- return Reg.virtRegIndex() + NumRegUnits;
- assert(Reg < NumRegUnits);
- return Reg.id();
+ unsigned getSparseIndexFromVirtRegOrUnit(VirtRegOrUnit VRegOrUnit) const {
+ if (VRegOrUnit.isVirtualReg())
+ return VRegOrUnit.asVirtualReg().virtRegIndex() + NumRegUnits;
+ assert(VRegOrUnit.asMCRegUnit() < NumRegUnits);
+ return VRegOrUnit.asMCRegUnit();
}
- Register getRegFromSparseIndex(unsigned SparseIndex) const {
+ VirtRegOrUnit getVirtRegOrUnitFromSparseIndex(unsigned SparseIndex) const {
if (SparseIndex >= NumRegUnits)
- return Register::index2VirtReg(SparseIndex - NumRegUnits);
- return Register(SparseIndex);
+ return VirtRegOrUnit(Register::index2VirtReg(SparseIndex - NumRegUnits));
+ return VirtRegOrUnit(SparseIndex);
}
public:
LLVM_ABI void clear();
LLVM_ABI void init(const MachineRegisterInfo &MRI);
- LaneBitmask contains(Register Reg) const {
- unsigned SparseIndex = getSparseIndexFromReg(Reg);
+ LaneBitmask contains(VirtRegOrUnit VRegOrUnit) const {
+ unsigned SparseIndex = getSparseIndexFromVirtRegOrUnit(VRegOrUnit);
RegSet::const_iterator I = Regs.find(SparseIndex);
if (I == Regs.end())
return LaneBitmask::getNone();
@@ -307,7 +307,7 @@ class LiveRegSet {
/// Mark the \p Pair.LaneMask lanes of \p Pair.Reg as live.
/// Returns the previously live lanes of \p Pair.Reg.
LaneBitmask insert(VRegMaskOrUnit Pair) {
- unsigned SparseIndex = getSparseIndexFromReg(Pair.RegUnit);
+ unsigned SparseIndex = getSparseIndexFromVirtRegOrUnit(Pair.VRegOrUnit);
auto InsertRes = Regs.insert(IndexMaskPair(SparseIndex, Pair.LaneMask));
if (!InsertRes.second) {
LaneBitmask PrevMask = InsertRes.first->LaneMask;
@@ -320,7 +320,7 @@ class LiveRegSet {
/// Clears the \p Pair.LaneMask lanes of \p Pair.Reg (mark them as dead).
/// Returns the previously live lanes of \p Pair.Reg.
LaneBitmask erase(VRegMaskOrUnit Pair) {
- unsigned SparseIndex = getSparseIndexFromReg(Pair.RegUnit);
+ unsigned SparseIndex = getSparseIndexFromVirtRegOrUnit(Pair.VRegOrUnit);
RegSet::iterator I = Regs.find(SparseIndex);
if (I == Regs.end())
return LaneBitmask::getNone();
@@ -335,9 +335,9 @@ class LiveRegSet {
void appendTo(SmallVectorImpl<VRegMaskOrUnit> &To) const {
for (const IndexMaskPair &P : Regs) {
- Register Reg = getRegFromSparseIndex(P.Index);
+ VirtRegOrUnit VRegOrUnit = getVirtRegOrUnitFromSparseIndex(P.Index);
if (P.LaneMask.any())
- To.emplace_back(Reg, P.LaneMask);
+ To.emplace_back(VRegOrUnit, P.LaneMask);
}
}
};
@@ -541,9 +541,11 @@ class RegPressureTracker {
LLVM_ABI void dump() const;
- LLVM_ABI void increaseRegPressure(Register RegUnit, LaneBitmask PreviousMask,
+ LLVM_ABI void increaseRegPressure(VirtRegOrUnit VRegOrUnit,
+ LaneBitmask PreviousMask,
LaneBitmask NewMask);
- LLVM_ABI void decreaseRegPressure(Register RegUnit, LaneBitmask PreviousMask,
+ LLVM_ABI void decreaseRegPressure(VirtRegOrUnit VRegOrUnit,
+ LaneBitmask PreviousMask,
LaneBitmask NewMask);
protected:
@@ -565,9 +567,12 @@ class RegPressureTracker {
discoverLiveInOrOut(VRegMaskOrUnit Pair,
SmallVectorImpl<VRegMaskOrUnit> &LiveInOrOut);
- LLVM_ABI LaneBitmask getLastUsedLanes(Register RegUnit, SlotIndex Pos) const;
- LLVM_ABI LaneBitmask getLiveLanesAt(Register RegUnit, SlotIndex Pos) const;
- LLVM_ABI LaneBitmask getLiveThroughAt(Register RegUnit, SlotIndex Pos) const;
+ LLVM_ABI LaneBitmask getLastUsedLanes(VirtRegOrUnit VRegOrUnit,
+ SlotIndex Pos) const;
+ LLVM_ABI LaneBitmask getLiveLanesAt(VirtRegOrUnit VRegOrUnit,
+ SlotIndex Pos) const;
+ LLVM_ABI LaneBitmask getLiveThroughAt(VirtRegOrUnit VRegOrUnit,
+ SlotIndex Pos) const;
};
LLVM_ABI void dumpRegSetPressure(ArrayRef<unsigned> SetPressure,
diff --git a/llvm/include/llvm/CodeGen/TargetRegisterInfo.h b/llvm/include/llvm/CodeGen/TargetRegisterInfo.h
index dabf0dc5ec173..35b14e8b8fd30 100644
--- a/llvm/include/llvm/CodeGen/TargetRegisterInfo.h
+++ b/llvm/include/llvm/CodeGen/TargetRegisterInfo.h
@@ -1450,7 +1450,7 @@ LLVM_ABI Printable printRegUnit(MCRegUnit Unit, const TargetRegisterInfo *TRI);
/// Create Printable object to print virtual registers and physical
/// registers on a \ref raw_ostream.
-LLVM_ABI Printable printVRegOrUnit(unsigned VRegOrUnit,
+LLVM_ABI Printable printVRegOrUnit(VirtRegOrUnit VRegOrUnit,
const TargetRegisterInfo *TRI);
/// Create Printable object to print register classes or register banks
diff --git a/llvm/lib/CodeGen/MachinePipeliner.cpp b/llvm/lib/CodeGen/MachinePipeliner.cpp
index a717d9e4a618d..d7eec9bd49230 100644
--- a/llvm/lib/CodeGen/MachinePipeliner.cpp
+++ b/llvm/lib/CodeGen/MachinePipeliner.cpp
@@ -1509,7 +1509,10 @@ class HighRegisterPressureDetector {
void dumpPSet(Register Reg) const {
dbgs() << "Reg=" << printReg(Reg, TRI, 0, &MRI) << " PSet=";
- for (auto PSetIter = MRI.getPressureSets(Reg); PSetIter.isValid();
+ // FIXME: The static cast is a bug compensating bugs in the callers.
+ VirtRegOrUnit VRegOrUnit =
+ Reg.isVirtual() ? VirtRegOrUnit(Reg) : VirtRegOrUnit(Reg.id());
+ for (auto PSetIter = MRI.getPressureSets(VRegOrUnit); PSetIter.isValid();
++PSetIter) {
dbgs() << *PSetIter << ' ';
}
@@ -1518,7 +1521,10 @@ class HighRegisterPressureDetector {
void increaseRegisterPressure(std::vector<unsigned> &Pressure,
Register Reg) const {
- auto PSetIter = MRI.getPressureSets(Reg);
+ // FIXME: The static cast is a bug compensating bugs in the callers.
+ VirtRegOrUnit VRegOrUnit =
+ Reg.isVirtual() ? VirtRegOrUnit(Reg) : VirtRegOrUnit(Reg.id());
+ auto PSetIter = MRI.getPressureSets(VRegOrUnit);
unsigned Weight = PSetIter.getWeight();
for (; PSetIter.isValid(); ++PSetIter)
Pressure[*PSetIter] += Weight;
@@ -1526,7 +1532,7 @@ class HighRegisterPressureDetector {
void decreaseRegisterPressure(std::vector<unsigned> &Pressure,
Register Reg) const {
- auto PSetIter = MRI.getPressureSets(Reg);
+ auto PSetIter = MRI.getPressureSets(VirtRegOrUnit(Reg));
unsigned Weight = PSetIter.getWeight();
for (; PSetIter.isValid(); ++PSetIter) {
auto &P = Pressure[*PSetIter];
@@ -1559,7 +1565,11 @@ class HighRegisterPressureDetector {
if (MI.isDebugInstr())
continue;
for (auto &Use : ROMap[&MI].Uses) {
- auto Reg = Use.RegUnit;
+ // FIXME: The static_cast is a bug.
+ Register Reg =
+ Use.VRegOrUnit.isVirtualReg()
+ ? Use.VRegOrUnit.asVirtualReg()
+ : static_cast<Register>(Use.VRegOrUnit.asMCRegUnit());
// Ignore the variable that appears only on one side of phi instruction
// because it's used only at the first iteration.
if (MI.isPHI() && Reg != getLoopPhiReg(MI, OrigMBB))
@@ -1609,8 +1619,14 @@ class HighRegisterPressureDetector {
Register Reg = getLoopPhiReg(*MI, OrigMBB);
UpdateTargetRegs(Reg);
} else {
- for (auto &Use : ROMap.find(MI)->getSecond().Uses)
- UpdateTargetRegs(Use.RegUnit);
+ for (auto &Use : ROMap.find(MI)->getSecond().Uses) {
+ // FIXME: The static_cast is a bug.
+ Register Reg =
+ Use.VRegOrUnit.isVirtualReg()
+ ? Use.VRegOrUnit.asVirtualReg()
+ : static_cast<Register>(Use.VRegOrUnit.asMCRegUnit());
+ UpdateTargetRegs(Reg);
+ }
}
}
@@ -1621,7 +1637,11 @@ class HighRegisterPressureDetector {
DenseMap<Register, MachineInstr *> LastUseMI;
for (MachineInstr *MI : llvm::reverse(OrderedInsts)) {
for (auto &Use : ROMap.find(MI)->getSecond().Uses) {
- auto Reg = Use.RegUnit;
+ // FIXME: The static_cast is a bug.
+ Register Reg =
+ Use.VRegOrUnit.isVirtualReg()
+ ? Use.VRegOrUnit.asVirtualReg()
+ : static_cast<Register>(Use.VRegOrUnit.asMCRegUnit());
if (!TargetRegs.contains(Reg))
continue;
auto [Ite, Inserted] = LastUseMI.try_emplace(Reg, MI);
@@ -1635,8 +1655,8 @@ class HighRegisterPressureDetector {
}
Instr2LastUsesTy LastUses;
- for (auto &Entry : LastUseMI)
- LastUses[Entry.second].insert(Entry.first);
+ for (auto [Reg, MI] : LastUseMI)
+ LastUses[MI].insert(Reg);
return LastUses;
}
@@ -1675,7 +1695,11 @@ class HighRegisterPressureDetector {
});
const auto InsertReg = [this, &CurSetPressure](RegSetTy &RegSet,
- Register Reg) {
+ VirtRegOrUnit VRegOrUnit) {
+ // FIXME: The static_cast is a bug.
+ Register Reg = VRegOrUnit.isVirtualReg()
+ ? VRegOrUnit.asVirtualReg()
+ : static_cast<Register>(VRegOrUnit.asMCRegUnit());
if (!Reg.isValid() || isReservedRegister(Reg))
return;
@@ -1712,7 +1736,7 @@ class HighRegisterPressureDetector {
const unsigned Iter = I - Stage;
for (auto &Def : ROMap.find(MI)->getSecond().Defs)
- InsertReg(LiveRegSets[Iter], Def.RegUnit);
+ InsertReg(LiveRegSets[Iter], Def.VRegOrUnit);
for (auto LastUse : LastUses[MI]) {
if (MI->isPHI()) {
@@ -2235,7 +2259,7 @@ static void computeLiveOuts(MachineFunction &MF, RegPressureTracker &RPTracker,
const TargetRegisterInfo *TRI = MF.getSubtarget().getRegisterInfo();
MachineRegisterInfo &MRI = MF.getRegInfo();
SmallVector<VRegMaskOrUnit, 8> LiveOutRegs;
- SmallSet<Register, 4> Uses;
+ SmallSet<VirtRegOrUnit, 4> Uses;
for (SUnit *SU : NS) {
const MachineInstr *MI = SU->getInstr();
if (MI->isPHI())
@@ -2243,9 +2267,10 @@ static void computeLiveOuts(MachineFunction &MF, RegPressureTracker &RPTracker,
for (const MachineOperand &MO : MI->all_uses()) {
Register Reg = MO.getReg();
if (Reg.isVirtual())
- Uses.insert(Reg);
+ Uses.insert(VirtRegOrUnit(Reg));
else if (MRI.isAllocatable(Reg))
- Uses.insert_range(TRI->regunits(Reg.asMCReg()));
+ for (MCRegUnit Unit : TRI->regunits(Reg.asMCReg()))
+ Uses.insert(VirtRegOrUnit(Unit));
}
}
for (SUnit *SU : NS)
@@ -2253,12 +2278,14 @@ static void computeLiveOuts(MachineFunction &MF, RegPressureTracker &RPTracker,
if (!MO.isDead()) {
Register Reg = MO.getReg();
if (Reg.isVirtual()) {
- if (!Uses.count(Reg))
- LiveOutRegs.emplace_back(Reg, LaneBitmask::getNone());
+ if (!Uses.count(VirtRegOrUnit(Reg)))
+ LiveOutRegs.emplace_back(VirtRegOrUnit(Reg),
+ LaneBitmask::getNone());
} else if (MRI.isAllocatable(Reg)) {
for (MCRegUnit Unit : TRI->regunits(Reg.asMCReg()))
- if (!Uses.count(Unit))
- LiveOutRegs.emplace_back(Unit, LaneBitmask::getNone());
+ if (!Uses.count(VirtRegOrUnit(Unit)))
+ LiveOutRegs.emplace_back(VirtRegOrUnit(Unit),
+ LaneBitmask::getNone());
}
}
RPTracker.addLiveRegs(LiveOutRegs);
diff --git a/llvm/lib/CodeGen/MachineScheduler.cpp b/llvm/lib/CodeGen/MachineScheduler.cpp
index 73993705c4a7b..de29a9fab876e 100644
--- a/llvm/lib/CodeGen/MachineScheduler.cpp
+++ b/llvm/lib/CodeGen/MachineScheduler.cpp
@@ -1580,10 +1580,10 @@ updateScheduledPressure(const SUnit *SU,
/// instruction.
void ScheduleDAGMILive::updatePressureDiffs(ArrayRef<VRegMaskOrUnit> LiveUses) {
for (const VRegMaskOrUnit &P : LiveUses) {
- Register Reg = P.RegUnit;
/// FIXME: Currently assuming single-use physregs.
- if (!Reg.isVirtual())
+ if (!P.VRegOrUnit.isVirtualReg())
continue;
+ Register Reg = P.VRegOrUnit.asVirtualReg();
if (ShouldTrackLaneMasks) {
// If the register has just become live then other uses won't change
@@ -1599,7 +1599,7 @@ void ScheduleDAGMILive::updatePressureDiffs(ArrayRef<VRegMaskOrUnit> LiveUses) {
continue;
PressureDiff &PDiff = getPressureDiff(&SU);
- PDiff.addPressureChange(Reg, Decrement, &MRI);
+ PDiff.addPressureChange(VirtRegOrUnit(Reg), Decrement, &MRI);
if (llvm::any_of(PDiff, [](const PressureChange &Change) {
return Change.isValid();
}))
@@ -1611,7 +1611,7 @@ void ScheduleDAGMILive::updatePressureDiffs(ArrayRef<VRegMaskOrUnit> LiveUses) {
}
} else {
assert(P.LaneMask.any());
- LLVM_DEBUG(dbgs() << " LiveReg: " << printVRegOrUnit(Reg, TRI) << "\n");
+ LLVM_DEBUG(dbgs() << " LiveReg: " << printReg(Reg, TRI) << "\n");
// This may be called before CurrentBottom has been initialized. However,
// BotRPTracker must have a valid position. We want the value live into the
// instruction or live out of the block, so ask for the previous
@@ -1638,7 +1638,7 @@ void ScheduleDAGMILive::updatePressureDiffs(ArrayRef<VRegMaskOrUnit> LiveUses) {
LI.Query(LIS->getInstructionIndex(*SU->getInstr()));
if (LRQ.valueIn() == VNI) {
PressureDiff &PDiff = getPressureDiff(SU);
- PDiff.addPressureChange(Reg, true, &MRI);
+ PDiff.addPressureChange(VirtRegOrUnit(Reg), true, &MRI);
if (llvm::any_of(PDiff, [](const PressureChange &Change) {
return Change.isValid();
}))
@@ -1814,9 +1814,9 @@ unsigned ScheduleDAGMILive::computeCyclicCriticalPath() {
unsigned MaxCyclicLatency = 0;
// Visit each live out vreg def to find def/use pairs that cross iterations.
for (const VRegMaskOrUnit &P : RPTracker.getPressure().LiveOutRegs) {
- Register Reg = P.RegUnit;
- if (!Reg.isVirtual())
+ if (!P.VRegOrUnit.isVirtualReg())
continue;
+ Register Reg = P.VRegOrUnit.asVirtualReg();
const LiveInterval &LI = LIS->getInterval(Reg);
const VNInfo *DefVNI = LI.getVNInfoBefore(LIS->getMBBEndIdx(BB));
if (!DefVNI)
diff --git a/llvm/lib/CodeGen/RegisterPressure.cpp b/llvm/lib/CodeGen/RegisterPressure.cpp
index 7d4674b3f74f0..182d0ab10273e 100644
--- a/llvm/lib/CodeGen/RegisterPressure.cpp
+++ b/llvm/lib/CodeGen/RegisterPressure.cpp
@@ -47,13 +47,14 @@ using namespace llvm;
/// Increase pressure for each pressure set provided by TargetRegisterInfo.
static void increaseSetPressure(std::vector<unsigned> &CurrSetPressure,
- const MachineRegisterInfo &MRI, unsigned Reg,
- LaneBitmask PrevMask, LaneBitmask NewMask) {
+ const MachineRegisterInfo &MRI,
+ VirtRegOrUnit VRegOrUnit, LaneBitmask PrevMask,
+ LaneBitmask NewMask) {
assert((PrevMask & ~NewMask).none() && "Must not remove bits");
if (PrevMask.any() || NewMask.none())
return;
- PSetIterator PSetI = MRI.getPressureSets(Reg);
+ PSetIterator PSetI = MRI.getPressureSets(VRegOrUnit);
unsigned Weight = PSetI.getWeight();
for (; PSetI.isValid(); ++PSetI)
CurrSetPressure[*PSetI] += Weight;
@@ -61,13 +62,14 @@ static void increaseSetPressure(std::vector<unsigned> &CurrSetPressure,
/// Decrease pressure for each pressure set provided by TargetRegisterInfo.
static void decreaseSetPressure(std::vector<unsigned> &CurrSetPressure,
- const MachineRegisterInfo &MRI, Register Reg,
- LaneBitmask PrevMask, LaneBitmask NewMask) {
+ const MachineRegisterInfo &MRI,
+ VirtRegOrUnit VRegOrUnit, LaneBitmask PrevMask,
+ LaneBitmask NewMask) {
assert((NewMask & ~PrevMask).none() && "Must not add bits");
if (NewMask.any() || PrevMask.none())
return;
- PSetIterator PSetI = MRI.getPressureSets(Reg);
+ PSetIterator PSetI = MRI.getPressureSets(VRegOrUnit);
unsigned Weight = PSetI.getWeight();
for (; PSetI.isValid(); ++PSetI) {
assert(CurrSetPressure[*PSetI] >= Weight && "register pressure underflow");
@@ -93,7 +95,7 @@ void RegisterPressure::dum...
[truncated]
|
|
I can do the renaming part separately if that makes sense |
topperc
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Use it in `printVRegOrUnit()`, `getPressureSets()`/`PSetIterator`, and in functions/classes dealing with register pressure. Static type checking revealed several bugs, mainly in MachinePipeliner. I'm not very familiar with this pass, so I left a bunch of FIXMEs. There is one bug in `findUseBetween()` in RegisterPressure.cpp, also annotated with a FIXME.
18c46c2 to
9bbc7f2
Compare
Use it in
printVRegOrUnit(),getPressureSets()/PSetIterator,and in functions/classes dealing with register pressure.
Static type checking revealed several bugs, mainly in MachinePipeliner.
I'm not very familiar with this pass, so I left a bunch of FIXMEs.
There is one bug in
findUseBetween()in RegisterPressure.cpp, alsoannotated with a FIXME.